package org.easy.tool.common;

import cn.hutool.json.JSON;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;

import java.util.List;

/**
 * @author Valley
 * Created by Valley on 2023/8/14 16:39
 */
public class JSONUtil {


    /**
     * 功能：解析获取字符串中的某个值，并以Map的格式返回
     * 参数：json位置，各个分割
     */
    public static Object parse(String json, String... param) throws Exception {
        JSON parse = cn.hutool.json.JSONUtil.parse(json);
        StringBuilder str = new StringBuilder("[" + param[0] + "]");
        for (int i = 1; i < param.length; i++) {
            str.append(".[").append(param[i]).append("]");
        }
        return parse.getByPath(str.toString());
    }

    /**
     * 功能：解析获取字符串中的某个值，并以Map的格式返回,如果是list，则是jsonArray，如果是单独的值，则是原始类型
     * 参数：json位置，以/分隔
     */
    public static Object parse(String json, String param) throws Exception {
        JSON parse = cn.hutool.json.JSONUtil.parse(json);
        String str = formatPath(param);
        return parse.getByPath(str);
    }

    /**
     * 功能：将json字符串转化为list列表
     */
    public static List<Object> parseList(String jsonList) {
        JSONArray objects = cn.hutool.json.JSONUtil.parseArray(jsonList);
        List<Object> list = objects.toList(Object.class);
        return list;
    }

    /**
     * 功能：将jsonArray转化为list列表
     */
    public static List<Object> parseList(Object jsonArray) {
        JSONArray array = (JSONArray) jsonArray;
        List<Object> list = array.toList(Object.class);
        return list;
    }

    /**
     * 功能：将/处理为tool常用的[].
     */
    private static String formatPath(String param) {
        String[] split = param.split("/");
        StringBuilder str = new StringBuilder("[" + split[0] + "]");
        for (int i = 1; i < split.length; i++) {
            str.append(".[").append(split[i]).append("]");
        }
        return str.toString();
    }

    /**
     * 功能：将某个对象或数组列表转化为JSON字符串
     */
    public static String toStr(Object obj) {
        return cn.hutool.json.JSONUtil.toJsonStr(obj);
    }

    /**
     * 功能：组装生成json,格式为key-value
     */
    public static Object createJSON(Object... jsonArray) {
        JSONObject obj = new JSONObject();
        for (int i = 0; i < jsonArray.length; i+=2) {
            String key = jsonArray[i] + "";
            obj.putByPath(formatPath(key), jsonArray[i+1]);
        }
        return obj;
    }

    /**
     * 功能：组装生成json,格式为key-value，返回值为JSON字符串
     */
    public static String createJSONStr(Object... jsonArray) {
        JSONObject obj = new JSONObject();
        for (int i = 0; i < jsonArray.length; i+=2) {
            String key = jsonArray[i] + "";
            obj.putByPath(formatPath(key), jsonArray[i+1]);
        }
        return toStr(obj);
    }



}
